package hn.cch.feature.stream;


import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * java.util.stream.*
 * jdk >= 1.8
 */
public class StreamDemo {


    public void demo() {
        // array转list
        String[] array = new String[]{"array0", "array0"};
        // List<String> list = Arrays.asList(array);
        // Arrays.asList 返回的List无法使用add和remove方法

        // 使用Constructor
        // List<String> list = new ArrayList<>(Arrays.asList(array));

        // 使用Collections
        // List<String> list = new ArrayList<>(array.length);
        // boolean flag = Collections.addAll(list, array);
        // logger.info("flag:{}", flag);

        // 使用Stream
        List<String> list = Stream.of(array).collect(Collectors.toList());


    }


    // 分页
    public <T> void page(List<T> list, int page) {

        List<List<T>> pageList = Stream.iterate(0, n -> n + 1).limit(list.size()).map(t ->
                list.stream().skip(t * page).limit(page).collect(Collectors.toList())).collect(Collectors.toList());
    }

    public List<Object> sortedMapToList(Map<String, Object> map) {
        // 要保留顺序的话只能使用LinkedHashMap
        LinkedHashMap<Object, Object> sorted = map.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(
                // 第一个参数是key，第二个参数是value，
                // 第三个参数指定重复value:参数(oldVal, newVal),返回:1.oldVal不覆盖;2.newVal覆盖
                // 第四个参数指定返回Map实现类型(默认类型是HashMap::new)
                Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldVal, newVal) -> oldVal, LinkedHashMap::new)
        );
        List<Object> list = new ArrayList<>(sorted.values());
        return list;
    }


}
